package com.fdb.efp.nls.service.impl;

import com.fdb.basic.framework.core.base.FrameworkService;
import com.fdb.basic.framework.core.util.StringUtil;
import com.fdb.basic.framework.core.util.TimeUtil;
import com.fdb.efp.nls.service.dao.BatBasmDao;
import com.fdb.efp.nls.service.dao.PrdRateStdDao;
import com.fdb.efp.nls.service.domain.PrdRateStd;
import com.fdb.efp.nls.service.facade.PrdRateStdService;
import com.fdb.efp.nls.service.vo.PrdRateStdVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;

/**
 * <p>ServiceImpl: 利率配置表				<p>
 * @author fuzm
 * @date 2018-05-10
 */
@Service("prdRateStdService")
public class PrdRateStdServiceImpl implements PrdRateStdService, FrameworkService {

    private static Logger logger = LoggerFactory.getLogger(PrdRateStdServiceImpl.class);
    //状态为启用
    private static final String USEDIND = "1";

    @Autowired
    private PrdRateStdDao prdRateStdDao;

    @Autowired
    private BatBasmDao batBasmDao;


    /**
     * 新增操作
     */
    public int insertPrdRateStd(PrdRateStdVO inPrdRateStdVo) {
        logger.debug("当前新增数据为:"+ inPrdRateStdVo.toString());
        int num;
        try {
            if(inPrdRateStdVo.getRateTypeId().length() >4)
                return -2;
            PrdRateStd prdRateStd = new PrdRateStd();
            setInsertDefaultProperty(inPrdRateStdVo);
            beanCopy(inPrdRateStdVo, prdRateStd);
            //prdRateStd.setRateTypeId(UUIDUtil.getUUID());
            if (prdRateStd.getUsedInd().equals(PrdRateStdServiceImpl.USEDIND))
                prdRateStd.setValidDate(TimeUtil.getCurrentDate());
            num = prdRateStdDao.insertPrdRateStd(prdRateStd);
        } catch (Exception e) {
            logger.error("新增数据发生异常!", e);
            num = -1;
        }
        logger.debug("当前新增数据条数为:"+ num);
        return num;
    }

    /**
     * 删除操作
     */
    public int deleteByPk(PrdRateStdVO inPrdRateStdVo) {
        logger.debug("当前删除数据条件为:"+ inPrdRateStdVo);
        int num;
        try {
            setUpdateDefaultProperty(inPrdRateStdVo);
            PrdRateStd prdRateStd = new PrdRateStd();
            beanCopy(inPrdRateStdVo, prdRateStd);
            PrdRateStd temp = prdRateStdDao.queryByPk(prdRateStd);
            if (!StringUtil.isEmpty(temp.getUsedInd()) && temp.getUsedInd().equals("2")){
                num = prdRateStdDao.deleteByPk(prdRateStd);
            }
            else
                num = -1;
        } catch (Exception e) {
            logger.error("删除数据发生异常!", e);
            num = -1;
        }
        logger.debug("根据条件:"+ inPrdRateStdVo +"删除的数据条数为"+ num);
        return num;
    }


    /**
     * 更新操作
     */
    public int updateByPk(PrdRateStdVO inPrdRateStdVo) {
        logger.debug("当前修改数据为:"+ inPrdRateStdVo.toString());
        int num;
        try {
            if(inPrdRateStdVo.getRateTypeId().length() >4)
                return -2;
            //判断第一次启用的时候，记录生效时间
            if (StringUtil.isEmpty(inPrdRateStdVo.getValidDate())&& PrdRateStdServiceImpl.USEDIND.equals(inPrdRateStdVo.getUsedInd())){//NOPMD
                inPrdRateStdVo.setValidDate(TimeUtil.getCurDate());
            }
            PrdRateStd prdRateStd = new PrdRateStd();
            setUpdateDefaultProperty(inPrdRateStdVo);
            beanCopy(inPrdRateStdVo, prdRateStd);
            num = prdRateStdDao.updateByPk(prdRateStd);
        } catch (Exception e) {
            logger.error("修改数据发生异常!", e);
            num = -1;
        }
        logger.debug("根据条件:"+ inPrdRateStdVo +"修改的数据条数为"+ num);
        return num;
    }

   

    @Override
    public int setStatusByPk(PrdRateStdVO prdRateStdVo) {
        logger.debug("当前修改数据为:" + prdRateStdVo.toString());
        int num;
        try {
            PrdRateStd queryPrdRateStd = new PrdRateStd();
            beanCopy(prdRateStdVo, queryPrdRateStd);
            PrdRateStd queryRslPrdRateStd = prdRateStdDao.queryByPk(queryPrdRateStd);
            if (prdRateStdVo.getUsedInd()!=null&&prdRateStdVo.getUsedInd().equals("2")&&queryRslPrdRateStd!=null&&
                    queryRslPrdRateStd.getUsedInd().equals(PrdRateStdServiceImpl.USEDIND)) {
                PrdRateStd telVerifGrpCfg = new PrdRateStd();
                beanCopy(prdRateStdVo, telVerifGrpCfg);
                num = prdRateStdDao.setStatusByPk(telVerifGrpCfg);
            }
            else {
                num = -2;
            }

        } catch (Exception e) {
            logger.error("修改数据发生异常!", e);
            num = -1;
        }
        logger.debug("根据条件:" + prdRateStdVo + "修改的数据条数为" + num);
        return num;
    }

    /**
     * 查询操作
     */
    public PrdRateStdVO queryByPk(PrdRateStdVO inPrdRateStdVo) {

        logger.debug("当前查询参数信息为:"+ inPrdRateStdVo);
        try {

            PrdRateStd queryPrdRateStd = new PrdRateStd();
            beanCopy(inPrdRateStdVo, queryPrdRateStd);
            PrdRateStd queryRslPrdRateStd = prdRateStdDao.queryByPk(queryPrdRateStd);
            if (Objects.nonNull(queryRslPrdRateStd)) {
                PrdRateStdVO outPrdRateStdVo = beanCopy(queryRslPrdRateStd, new PrdRateStdVO());
                logger.debug("当前查询结果为:"+ outPrdRateStdVo.toString());
                return outPrdRateStdVo;
            } else {
                logger.debug("当前查询结果为空!");
            }
        } catch (Exception e) {
            logger.error("查询数据发生异常!", e);
        }
        return null;
    }

    @Override
    public PrdRateStdVO queryByRange(PrdRateStdVO prdRateStdVo) {
        logger.debug("当前查询参数信息为:"+ prdRateStdVo);
        try {
            PrdRateStd queryRslPrdRateStd = prdRateStdDao.queryByRange(prdRateStdVo);
            if (Objects.nonNull(queryRslPrdRateStd)) {
                PrdRateStdVO outPrdRateStdVo = beanCopy(queryRslPrdRateStd, new PrdRateStdVO());
                logger.debug("当前查询结果为:"+ outPrdRateStdVo.toString());
                return outPrdRateStdVo;
            } else {
                logger.debug("当前查询结果为空!");
            }
        } catch (Exception e) {
            logger.error("查询数据发生异常!", e);
        }
        return null;
    }

    

    /**
     * 查询用户权限数据
     */
    @SuppressWarnings("unchecked")
    public List<PrdRateStdVO> queryAllOwner(PrdRateStdVO prdRateStdVo) {

        logger.debug("当前查询本人所属数据信息的参数信息为:");
        List<PrdRateStdVO> list = null;
        try {
            List<PrdRateStd> prdRateStds = prdRateStdDao.queryAllOwnerByPage(prdRateStdVo);
            logger.debug("当前查询本人所属数据信息的结果集数量为:"+ prdRateStds.size());
            pageSet(prdRateStds, prdRateStdVo);
            list = (List<PrdRateStdVO>) beansCopy(prdRateStds, PrdRateStdVO.class);
        } catch (Exception e) {
            logger.error("数据转换出现异常!", e);
        }

        return list;

    }
}
